home *** CD-ROM | disk | FTP | other *** search
/ Merciful 5 / Merciful - Disc 5.iso / software / p / pcqpascalv1.2d.lha / Examples2 / ChangeIO / ChangeIO.p
Encoding:
Text File  |  1997-05-06  |  2.7 KB  |  123 lines

  1. Program ChangeIO;
  2.  
  3. { ======================================================================
  4.  
  5.   ChangeIO.p ,  (C)16|06|1992 by "Diesel" Bernd Künnen
  6.  
  7.   Zur Benutzung im CLI bzw. in Scripts. Zweck des Ganzen ist es,
  8.   das 640*200-CON-Fenster, das durch das Runtime-System des PCQ-
  9.   Compilers bei einem WB-Start geöffnet wird, auf eine angenehmere
  10.   Größe zu bringen. Und das geht so :
  11.  
  12.   ChangeIO Myproggy con:10/0/400/50/
  13.  
  14.   Der neue IO-Kanal darf dabei max. 16 Buchstaben haben. Angewendet
  15.   werden kann das Ganze sowohl auf Objectcodes als auch auf fertige
  16.   Programme.
  17.  
  18.     Allens chlor ?
  19.  
  20.                             Diesel
  21.  
  22.   ======================================================================}
  23.  
  24.  
  25. {$I "include:libraries/dos.i"}
  26. {$I "include:utils/stringlib.i"}
  27. {$I "include:utils/parameters.i"}
  28.  
  29. Const
  30.     PCQ_IO : String = "CON:0/0/640/200/";
  31.  
  32.     Max    = 1024;
  33.  
  34. Type
  35.     Memo    = Array[0..Max-1] Of Byte;
  36.     MemoPtr = ^memo;
  37.  
  38. VAR
  39.     i        : Short;
  40.     x,
  41.     pcq,
  42.     old,
  43.     anz,
  44.     anz2     : Integer;
  45.     myMem    : MemoPtr;
  46.     buf      : Address;
  47.     pFile,
  48.     newIO    : String;
  49.     MyHandle : FileHandle;
  50.  
  51.  
  52.  
  53. Procedure CleanExit(why: String; rt : Integer);
  54. Begin
  55.     IF Myhandle<>NIL then DosClose(MyHandle);
  56.  
  57.     If why<>NIL then begin
  58.       writeln(why);
  59.       writeln("\nUsage : ChangeIO Filename IOstring(max. 16 chars)\nE.g. changeIO NewProg raw:0/0/99/40/Hi\n");
  60.       Delay(100);
  61.     End;
  62.  
  63.     Exit(rt);
  64.  
  65. End;
  66.  
  67.  
  68.  
  69. BEGIN
  70.   { --  ersma` Begrüßung, logo  -- }
  71.   writeln("ChangeIO 1.0, (C)1992 by Diesel.\n");
  72.  
  73.   { --jetzt die Arbeitsbuffers holen -- }
  74.   pFile  := AllocString(100);
  75.   newIO := AllocString(40);
  76.   New(myMem);
  77.  
  78.   pcq:=strlen(PCQ_IO);
  79.  
  80.   { -- das 1. Arg. holen -- }
  81.   GetParam(1,pFile);
  82.   IF StrLen(pFile)=0 THEN Cleanexit("No parameters",5);
  83.  
  84.   { -- das 2. Arg holen -- }
  85.   GetParam(2,newIO);
  86.   IF StrLen(newIO)=0 THEN Cleanexit("No IO-String",5);
  87.   IF strlen(newIO) > pcq then CleanExit("New IO-String 2 long!",5);
  88.  
  89.   { -- Jetzt das File öffnen -- }
  90.   MyHandle:=DOSOpen(pFile,Mode_OldFile);
  91.   IF MyHandle=NIL THEN CleanExit("Could not open file",10);
  92.  
  93.   { -- Suche den alten PCQ-IO-String -- }
  94.   Repeat
  95.     anz:=DOSRead(MyHandle,myMem,Max);
  96.  
  97.     IF anz>pcq Then
  98.     Begin
  99.       i:=-1;
  100.       Repeat
  101.     i:=i+1;
  102.     buf:=Adr(myMem^[i]);
  103.     x:=strcmp(PCQ_IO,buf);
  104.       until (x=0) or (i=anz-pcq);
  105.     End;
  106.  
  107.   Until (anz<Max) OR (x=0);
  108.  
  109.   If x<>0 then cleanexit("Could not find old IO-String",5);
  110.  
  111.   { -- Ersetze den alten durch den neuen IO-String -- }
  112.   strcpy(buf,newIO);
  113.  
  114.   { -- geänderten Inhalt in die Datei schreiben -- }
  115.   old:=Seek(MyHandle,-1*anz,Offset_Current);
  116.   anz2:=DosWrite(MyHandle,myMem,anz);
  117.   If anz2<>anz then CleanExit("Error on changing file",10);
  118.  
  119.   { -- Bye bye GTI -- }
  120.   Cleanexit(NIL,0);
  121.  
  122. END.
  123.